package types

import (
	"common/response"
	"encoding/json"
	"errors"
)

const (
	MessageTypeHeartbeat = 1 // 心跳
	MessageTypeRegister  = 2 // 注册

	HeartbeatCheckTime   = 30  // 心跳检测几秒检测一次
	HeartbeatTime        = 40  // 心跳距离上一次的最大时间
	AddAccounts          = 6   // 同步Accounts
	DellAccounts         = 7   // 同步Accounts
	ChanBufferRegister   = 100 // 注册chan缓冲
	ChanBufferUnregister = 100 // 注销chan大小
	NotificationMessage  = 99  // 通知加入房间
	SysHi                = 101 // 群体接受消息
	SendMessage          = 102 // 发送消息
	AddRoom              = 103 // 发送消息
	LeftRoom             = 104 // 发送消息
	Success              = 200 // 表示返回错误
	SysErr               = 500 // 表示返回错误
)

type RedisAccounts struct {
	Type int32  `json:"type"`
	Data string `json:"data"`
}
type Response struct {
	Type int32         `json:"type"`
	Data string        `json:"data"`
	Body response.Body `json:"body"`
}
type RequestMessage struct {
	Type        int32  `json:"type"`
	AccountUuid string `json:"account_uuid"` //群发消息接受的用户
	Data        string `json:"data"`
}
type UnAccountBindData struct {
	Id   string `json:"id"`
	Uuid string `json:"uuid"`
}

func GetMessageData[T any](s string) (T, error) {
	var (
		data T
	)
	err := json.Unmarshal([]byte(s), &data)
	if err != nil {
		return data, errors.New("请传入json，" + err.Error())
	}
	return data, nil
}

func GetStructByString(a interface{}) ([]byte, error) {
	marshal, err := json.Marshal(a)
	if err != nil {
		return nil, err
	}
	return marshal, nil
}
